const Service = require('egg').Service;
class WinService extends Service {
    // 界面列表
    async list({ pageIndex = 0, pageSize = 10, prizeType }) {
        var pageIndex = pageIndex * 1 * pageSize;
        var pageSize = pageSize * 1;
        const options = {
            where: {
                prize: {
                    $ne: null
                }
            },
            offset: pageIndex,
            limit: pageSize,
            attributes: ['id', 'name', 'num', 'sign', 'prize'],
            order: [['created_at', 'ASC']]
        };
        if (prizeType != undefined) {
            // 返回一等奖，二等奖的用户列表
            options.where.prize = prizeType;
        }

        const user = this.ctx.model.User.findAndCountAll(options);
        return user;
    }

    // 抽奖
    async win(data) {
        const ctx = this.ctx;
        const { User, Prize, Win } = this.ctx.model;
        const { PrizeType, PrizeNum } = data;
        // PrizeType  奖品类型
        // PrizeNum   奖品数量
        const t = await this.ctx.model.transaction();
        console.log(PrizeType);
        console.log(PrizeNum);

        const prize = await Prize.findOne({
            where: { types: PrizeType },
            transaction: t
        });

        // 是否有该奖品
        if (prize) {
            const user = await User.findAndCountAll({
                where: {
                    prize: false
                },
                transaction: t
            });
            const count = user.count;
            if (count == 0) {
                this.ctx.throw(500, "所有人员都已中奖了~");
            } else if (count <= PrizeNum) {

                const user1 = await User.findAll({
                    where: {
                        prize: false
                    },
                    transaction: t
                });

                for (var item of user1) {
                    const user = await User.update({ prize: true }, {
                        where: {
                            id: item.id
                        },
                        transaction: t
                    });

                    // 创建中奖记录
                    const win = await Win.create({
                        uid: item.id, // 用户ID
                        uname: item.name,// 用户姓名
                        unum: item.num,// 用户工号
                        pid: PrizeType
                    }, { transaction: t })
                }

                console.log("第1个条件");
                await t.commit();
                return user1;
            } else {
                // 剩余人数大于 抽奖的人数

                console.log("第二个条件");
                const options = {
                    where: {
                        prize: false
                    },
                    limit: PrizeNum,
                    attributes: ['id', 'name', 'num'],
                    order: [
                        this.ctx.model.random()
                    ],
                    transaction: t
                };
                const user2 = await User.findAll(options);
                for (var item of user2) {
                    // 更新用户表中奖状态

                    const user = await User.update({ prize: true }, {
                        where: {
                            id: item.id
                        },
                        transaction: t
                    });

                    console.log(user);

                    // 创建中奖记录
                    const win = await Win.create({
                        uid: item.id, // 用户ID
                        uname: item.name,// 用户姓名
                        unum: item.num,// 用户工号
                        pid: PrizeType
                    }, { transaction: t })
                }
                await t.commit();
                return user2;
            }


        } else {
            t.rollback();
            this.ctx.throw(500, "没有该奖品信息");
        }
        // 1、查找奖品数量是否还够抽的
        // 2、查找未中奖用户的数量是否够
        // 3、随机返回指定数量的用户
        // 4、把这些用户的中奖字段，设置为奖品类型
        // 5、写一条记录
    }

    // 查找中奖情况，根据UserId
    async find(id) {
        // 删除vote表的数据
        // 把每个界面的vote 设置为0
    }

}
module.exports = WinService;